home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
090
/
pctjoc85.arc
/
MACTEST.ASM
< prev
next >
Wrap
Assembly Source File
|
1985-07-05
|
3KB
|
141 lines
PAGE
PAGE ,132
TITLE MACTEST Macro expansion benchmark
; THIS PROGRAM IS NOT EXECUTABLE.
; USE ONLY FOR TIMING MACRO GENERATION.
.NEST = 0
.IFNUM = 0
.MAXIF = 0
MIF MACRO ARG1,CONDITION,ARG2
.NEST = .NEST + 1
.MAXIF = .MAXIF + 1
.IFNUM = .MAXIF
STARTIF %.IFNUM
PUSH AX
MOV AX,ARG1
CMP AX,ARG2
POP AX
CONDITION %.IFNUM
ENDM
STARTIF MACRO WHERE
.IF&WHERE = 2
ENDM
MELSE MACRO
MELSE1 %.IFNUM
ENDM
MELSE1 MACRO WHERE
JMP ??END&WHERE
.IF&WHERE = 1
??ELSE&WHERE:
ENDM
MENDIF MACRO
MENDIF1 %.IFNUM
.NEST = .NEST - 1
if .NEST
.IFNUM = .IFNUM - 1
.X = .IFNUM
.Y = .IFNUM
REPT .X
MENDIF2 %.IFNUM
ife .Y
EXITM
endif
ENDM
endif
ENDM
MENDIF1 MACRO WHERE
if .IF&WHERE - 1
??ELSE&WHERE:
endif
??END&WHERE:
.IF&WHERE = 0
ENDM
MENDIF2 MACRO WHERE
if .IF&WHERE
.Y = 0
else
.IFNUM = .IFNUM - 1
endif
ENDM
; Note that each condition generates a jump on the reverse
; condition. That's because for the expression IF EQ, a jump
; to the ELSE part is taken if the result is unequal.
EQ MACRO WHERE
JNE ??ELSE&WHERE
ENDM
NE MACRO WHERE
JE ??ELSE&WHERE
ENDM
GT MACRO WHERE
JLE ??ELSE&WHERE
ENDM
GE MACRO WHERE
JL ??ELSE&WHERE
ENDM
LT MACRO WHERE
JGE ??ELSE&WHERE
ENDM
LE MACRO WHERE
JG ??ELSE&WHERE
ENDM
CSEG SEGMENT
ASSUME CS:CSEG,DS:CSEG
TEST PROC
JMP CODE1
A DW ?
B DW ?
C DW ?
D DW ?
E DW ?
F DW ?
; For 10 iterations, change to IRP X,<1,2,3,4,5,6,7,8,9,0>
IRP X,<1>
CODE&X: MIF A,EQ,B
MOV WORD PTR C,1234
MOV AX,A
MOV BX,B
ADD AX,BX
MIF B,GT,C
SUB AX,C
MELSE
NEG AX
ADD AX,C
MENDIF
MELSE
MIF D,LE,F
ADD BX,E
MELSE
MIF F,NE,A
SUB BX,AX
ADD AX,E
MENDIF
MENDIF
MENDIF
ENDM
TEST ENDP
CSEG ENDS
STACK SEGMENT STACK
DW 32 DUP(?)
STACK ENDS
END TEST